<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico"/>
<title>DynamoRIO API: dr_config.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">DynamoRIO API
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('dr__config_8h.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Data Structures</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">dr_config.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Deployment API for DynamoRIO. Use these functions to register processes to run under DynamoRIO, unregister processes, obtain existing registration information, and nudge running processes.  
<a href="#details">More...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a386c1346b4d4a46488fc050c51bfe9bc"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>&#160;&#160;&#160;2048</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a486e581c1077fcb8a49e796c9bc188be"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> { <br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188beab9f1f2d848cb082195e8c4c32dce3e33">DR_MODE_NONE</a> =  0, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188bea9063a7ce4d71eb37a49799474fe29873">DR_MODE_CODE_MANIPULATION</a> =  1, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188beae0fab29598cc916f2dc36782c922843b">DR_MODE_DO_NOT_RUN</a> =  4
<br/>
 }</td></tr>
<tr class="memitem:a5e24de02bea5743b74adb6e64af19ae7"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> { <br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a4bcaaca758394280af450e0c252715d9">DR_SUCCESS</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7aebeb651e698240eb01f5c3b7a467fdd6">DR_PROC_REG_EXISTS</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7ab2522e1ae0ea57910e1c6d8787b9d69a">DR_PROC_REG_INVALID</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a349643125983c919f8ea895166e4e39e">DR_PRIORITY_INVALID</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a11b74563fc86bcaaad93ce039b8b47db">DR_ID_CONFLICTING</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a14aafa949eed135a40b0459a90f4eab3">DR_ID_INVALID</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7aa24c8d2b40ace9aae7f20b22fd84816e">DR_FAILURE</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7adf420fb6b013980ca4b2ae7c06b9c919">DR_NUDGE_PID_NOT_INJECTED</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a0a00e5e046095c62b842d68fbb7fa8b5">DR_NUDGE_TIMEOUT</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7ab9f883f5c86bb469aa46860dc7071993">DR_CONFIG_STRING_TOO_LONG</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a5a0cf2e3b6df56a58c43c89749398365">DR_CONFIG_FILE_WRITE_FAILED</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a5fe51446c4213ff60d41d3708d8fab26">DR_NUDGE_PID_NOT_FOUND</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7a32c7899726c48bb58b221667c73c9e9c">DR_CONFIG_OPTIONS_INVALID</a>
<br/>
 }</td></tr>
<tr class="memitem:a43632ea1157f971b7af4273ef696935c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> { <br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935ca394959d2d12dfb8d5339eed36bda3b21">DR_PLATFORM_DEFAULT</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935caf58104da0e56626d6cbf597c038a28a1">DR_PLATFORM_32BIT</a>, 
<br/>
&#160;&#160;<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935cab4ae438e060cb8167b7913ed1dad2b8f">DR_PLATFORM_64BIT</a>
<br/>
 }</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a28e562c5d7cd81fd4904224fce15f7a6"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a28e562c5d7cd81fd4904224fce15f7a6">dr_config_status_code_to_string</a> (<a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> code)</td></tr>
<tr class="memitem:a10d7c5dbc9a055fa6c18bf3f2a6eea46"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a10d7c5dbc9a055fa6c18bf3f2a6eea46">dr_register_process</a> (const char *process_name, process_id_t pid, bool global, const char *dr_root_dir, <a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> dr_mode, bool debug, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, const char *dr_options)</td></tr>
<tr class="memitem:aca4a88a8e35548096f920e90d9a8ad12"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aca4a88a8e35548096f920e90d9a8ad12">dr_unregister_process</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform)</td></tr>
<tr class="memitem:a285ae07edfcba05d92510fb38e8057d1"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a285ae07edfcba05d92510fb38e8057d1">dr_register_syswide</a> (<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, const char *dr_root_dir)</td></tr>
<tr class="memitem:a2e9925a6b97a3fbe329f94faa60638ca"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a2e9925a6b97a3fbe329f94faa60638ca">dr_unregister_syswide</a> (<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, const char *dr_root_dir)</td></tr>
<tr class="memitem:ad687570692d702cb71e4f3f4ac1a3559"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#ad687570692d702cb71e4f3f4ac1a3559">dr_syswide_is_on</a> (<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, const char *dr_root_dir)</td></tr>
<tr class="memitem:aa97d41a6af959ad7022f8a9f44063c6d"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aa97d41a6af959ad7022f8a9f44063c6d">dr_process_is_registered</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, char *dr_root_dir, <a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> *dr_mode, bool *debug, char *dr_options)</td></tr>
<tr class="memitem:a70da2fb9d39da91761eaaf686746f68b"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <br class="typebreak"/>
dr_registered_process_iterator_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a70da2fb9d39da91761eaaf686746f68b">dr_registered_process_iterator_start</a> (<a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, bool global)</td></tr>
<tr class="memitem:aaaf883cebe8ed67ee4f0fb9a044ef7f5"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aaaf883cebe8ed67ee4f0fb9a044ef7f5">dr_registered_process_iterator_hasnext</a> (dr_registered_process_iterator_t *iter)</td></tr>
<tr class="memitem:a7d9d2d496f3ef8bdbfbb10c0567673f9"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a7d9d2d496f3ef8bdbfbb10c0567673f9">dr_registered_process_iterator_next</a> (dr_registered_process_iterator_t *iter, char *process_name, char *dr_root_dir, <a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> *dr_mode, bool *debug, char *dr_options)</td></tr>
<tr class="memitem:aee72e717937024591655f039c5b9c637"><td class="memItemLeft" align="right" valign="top">DR_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aee72e717937024591655f039c5b9c637">dr_registered_process_iterator_stop</a> (dr_registered_process_iterator_t *iter)</td></tr>
<tr class="memitem:ae9e35bfc0682dd3bee71eb8992d9eca3"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#ae9e35bfc0682dd3bee71eb8992d9eca3">dr_register_client</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id, size_t client_pri, const char *client_path, const char *client_options)</td></tr>
<tr class="memitem:a882f9166151596e7087393384d0f50c7"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a882f9166151596e7087393384d0f50c7">dr_unregister_client</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id)</td></tr>
<tr class="memitem:aee3f7b1d9fb8b7e99e91877b692f39a5"><td class="memItemLeft" align="right" valign="top">DR_EXPORT size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aee3f7b1d9fb8b7e99e91877b692f39a5">dr_num_registered_clients</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform)</td></tr>
<tr class="memitem:a9c15192d806139f70aa84b41589548e8"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a9c15192d806139f70aa84b41589548e8">dr_get_client_info</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id, size_t *client_pri, char *client_path, char *client_options)</td></tr>
<tr class="memitem:a3aac5bae187825f8f7939a29e513bbc0"><td class="memItemLeft" align="right" valign="top">DR_EXPORT dr_client_iterator_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a3aac5bae187825f8f7939a29e513bbc0">dr_client_iterator_start</a> (const char *process_name, process_id_t pid, bool global, <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a> dr_platform)</td></tr>
<tr class="memitem:a604f8bd910defd753c4f11b10200e6f5"><td class="memItemLeft" align="right" valign="top">DR_EXPORT bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a604f8bd910defd753c4f11b10200e6f5">dr_client_iterator_hasnext</a> (dr_client_iterator_t *iter)</td></tr>
<tr class="memitem:a66cec11c1973fc0fb42c86c424710f41"><td class="memItemLeft" align="right" valign="top">DR_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a66cec11c1973fc0fb42c86c424710f41">dr_client_iterator_next</a> (dr_client_iterator_t *iter, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> *client_id, size_t *client_pri, char *client_path, char *client_options)</td></tr>
<tr class="memitem:ac081b0a0b4e4ba777ca8238703596b82"><td class="memItemLeft" align="right" valign="top">DR_EXPORT void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#ac081b0a0b4e4ba777ca8238703596b82">dr_client_iterator_stop</a> (dr_client_iterator_t *iter)</td></tr>
<tr class="memitem:a9df3d364222898cebc24264a161e2a5f"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a9df3d364222898cebc24264a161e2a5f">dr_nudge_process</a> (const char *process_name, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id, uint64 arg, uint timeout_ms, int *nudge_count)</td></tr>
<tr class="memitem:a56dbe16a233afc5d2803222799ecd490"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a56dbe16a233afc5d2803222799ecd490">dr_nudge_pid</a> (process_id_t process_id, <a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id, uint64 arg, uint timeout_ms)</td></tr>
<tr class="memitem:aac5fb9f1e0707ece22a6b987617cef95"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#aac5fb9f1e0707ece22a6b987617cef95">dr_nudge_all</a> (<a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> client_id, uint64 arg, uint timeout_ms, int *nudge_count)</td></tr>
<tr class="memitem:a6f7a3388a7609af0ca4865a54f43efd3"><td class="memItemLeft" align="right" valign="top">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="dr__config_8h.html#a6f7a3388a7609af0ca4865a54f43efd3">dr_get_config_dir</a> (bool global, bool alternative_local, char *config_dir, size_t config_dir_sz)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>Deployment API for DynamoRIO. Use these functions to register processes to run under DynamoRIO, unregister processes, obtain existing registration information, and nudge running processes. </p>
<dl class="section note"><dt>Note:</dt><dd>The dr_config library is currently not multi-thread safe. Users of the library should ensure that no more then one thread accesses the library at a time. This limitation will be addressed in future releases. </dd></dl>
</div><hr/><h2>Macro Definition Documentation</h2>
<a class="anchor" id="a386c1346b4d4a46488fc050c51bfe9bc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define DR_MAX_OPTIONS_LENGTH&#160;&#160;&#160;2048</td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Maximum length of a registered process's options string </p>

</div>
</div>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Return status codes for process registration, unregistration and nudging. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a4bcaaca758394280af450e0c252715d9"></a>DR_SUCCESS</em>&nbsp;</td><td>
<p>Operation succeeded. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7aebeb651e698240eb01f5c3b7a467fdd6"></a>DR_PROC_REG_EXISTS</em>&nbsp;</td><td>
<p>Process registration failed due to an existing registration. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7ab2522e1ae0ea57910e1c6d8787b9d69a"></a>DR_PROC_REG_INVALID</em>&nbsp;</td><td>
<p>Operation failed because the supplied process is not registered. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a349643125983c919f8ea895166e4e39e"></a>DR_PRIORITY_INVALID</em>&nbsp;</td><td>
<p>Client registration failed due to an invalid priority value. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a11b74563fc86bcaaad93ce039b8b47db"></a>DR_ID_CONFLICTING</em>&nbsp;</td><td>
<p>Client registration failed due to a conflicting ID. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a14aafa949eed135a40b0459a90f4eab3"></a>DR_ID_INVALID</em>&nbsp;</td><td>
<p>Client operation failed due to an invalid client ID. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7aa24c8d2b40ace9aae7f20b22fd84816e"></a>DR_FAILURE</em>&nbsp;</td><td>
<p>Unknown failure. Check that caller has adequate permissions for this operation. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7adf420fb6b013980ca4b2ae7c06b9c919"></a>DR_NUDGE_PID_NOT_INJECTED</em>&nbsp;</td><td>
<p>Nudge operation failed because the specified process id is not under DR. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a0a00e5e046095c62b842d68fbb7fa8b5"></a>DR_NUDGE_TIMEOUT</em>&nbsp;</td><td>
<p>Nudge operation timed out waiting for target process to finish handling a nudge. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7ab9f883f5c86bb469aa46860dc7071993"></a>DR_CONFIG_STRING_TOO_LONG</em>&nbsp;</td><td>
<p>Field length exceeded, probably due to a too-long option string </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a5a0cf2e3b6df56a58c43c89749398365"></a>DR_CONFIG_FILE_WRITE_FAILED</em>&nbsp;</td><td>
<p>Failed to write to the config file. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a5fe51446c4213ff60d41d3708d8fab26"></a>DR_NUDGE_PID_NOT_FOUND</em>&nbsp;</td><td>
<p>Nudge operation failed because the specified process id does not exist. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a5e24de02bea5743b74adb6e64af19ae7a32c7899726c48bb58b221667c73c9e9c"></a>DR_CONFIG_OPTIONS_INVALID</em>&nbsp;</td><td>
<p>Client options contain invalid characters (';' or all 3 quotes). </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="a486e581c1077fcb8a49e796c9bc188be"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Specifies DynamoRIO's operation mode. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a486e581c1077fcb8a49e796c9bc188beab9f1f2d848cb082195e8c4c32dce3e33"></a>DR_MODE_NONE</em>&nbsp;</td><td>
<p>No mode. Clients should not attempt to register a process in this mode. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a486e581c1077fcb8a49e796c9bc188bea9063a7ce4d71eb37a49799474fe29873"></a>DR_MODE_CODE_MANIPULATION</em>&nbsp;</td><td>
<p>Run DynamoRIO in Code Manipulation mode. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a486e581c1077fcb8a49e796c9bc188beae0fab29598cc916f2dc36782c922843b"></a>DR_MODE_DO_NOT_RUN</em>&nbsp;</td><td>
<p>Do not run this application under DynamoRIO control. Useful for following all child processes except a handful (blacklist). </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="a43632ea1157f971b7af4273ef696935c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Allow targeting both 32-bit and native 64-bit processes separately. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="a43632ea1157f971b7af4273ef696935ca394959d2d12dfb8d5339eed36bda3b21"></a>DR_PLATFORM_DEFAULT</em>&nbsp;</td><td>
<p>The platform this tool is compiled for. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a43632ea1157f971b7af4273ef696935caf58104da0e56626d6cbf597c038a28a1"></a>DR_PLATFORM_32BIT</em>&nbsp;</td><td>
<p>32-bit settings (for 32-bit processes). </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="a43632ea1157f971b7af4273ef696935cab4ae438e060cb8167b7913ed1dad2b8f"></a>DR_PLATFORM_64BIT</em>&nbsp;</td><td>
<p>64-bit settings (for native 64-bit processes). </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="a604f8bd910defd753c4f11b10200e6f5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool dr_client_iterator_hasnext </td>
          <td>(</td>
          <td class="paramtype">dr_client_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A client iterator created with <a class="el" href="dr__config_8h.html#a3aac5bae187825f8f7939a29e513bbc0">dr_client_iterator_start()</a></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true if there are more clients to iterate over </dd></dl>

</div>
</div>
<a class="anchor" id="a66cec11c1973fc0fb42c86c424710f41"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT void dr_client_iterator_next </td>
          <td>(</td>
          <td class="paramtype">dr_client_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a> *&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>client_pri</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>client_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>client_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Return information about a client.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A client iterator created with <a class="el" href="dr__config_8h.html#a3aac5bae187825f8f7939a29e513bbc0">dr_client_iterator_start()</a></td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_pri</td><td>The client's priority.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_path</td><td>The client's path provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length MAX_PATH.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_options</td><td>The client options provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a3aac5bae187825f8f7939a29e513bbc0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT dr_client_iterator_t* dr_client_iterator_start </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Creates and starts an iterator for iterating over all clients registered for the given process.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be queried. If pid == 0, the general configuration for process_name will be queried.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to check.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>iterator for use with <a class="el" href="dr__config_8h.html#a604f8bd910defd753c4f11b10200e6f5">dr_client_iterator_hasnext()</a> and <a class="el" href="dr__config_8h.html#a66cec11c1973fc0fb42c86c424710f41">dr_client_iterator_next()</a>. Must be freed with <a class="el" href="dr__config_8h.html#ac081b0a0b4e4ba777ca8238703596b82">dr_client_iterator_stop()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ac081b0a0b4e4ba777ca8238703596b82"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT void dr_client_iterator_stop </td>
          <td>(</td>
          <td class="paramtype">dr_client_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Stops and frees a client iterator.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A client iterator created with <a class="el" href="dr__config_8h.html#a3aac5bae187825f8f7939a29e513bbc0">dr_client_iterator_start()</a> </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a28e562c5d7cd81fd4904224fce15f7a6"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static const char* dr_config_status_code_to_string </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a>&#160;</td>
          <td class="paramname"><em>code</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Translates dr_config_status_t code to its corresponding message string.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">code</td><td>dr_config_status_t code to be translated.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The translated message string. </dd></dl>

</div>
</div>
<a class="anchor" id="a9c15192d806139f70aa84b41589548e8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_get_client_info </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&#160;</td>
          <td class="paramname"><em>client_pri</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>client_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>client_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieve client registration information for a particular process for the current user.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be queried. If pid == 0, the general configuration for process_name will be queried.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to unset.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_pri</td><td>The client's priority.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_path</td><td>The client's path provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length MAX_PATH.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">client_options</td><td>The client options provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the call. </dd></dl>

</div>
</div>
<a class="anchor" id="a6f7a3388a7609af0ca4865a54f43efd3"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_get_config_dir </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>alternative_local</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>config_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>config_dir_sz</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Returns in <code>config_dir</code> the configuration directory used to store config files. In order to use local config files when the normal interactive user home directory environment variable (HOME on Linux or MacOS; USERPROFILE on Windows) is not set and when using one-step configure-and-run, call this routine prior to creating the child process and pass true for <code>alternative_local</code>. For multi-step, the caller must set the DYNAMORIO_CONFIGDIR environment variable.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">alternative_local</td><td>Whether to locate a temporary directory to use for user-local config files and to set the DYNAMORIO_CONFIGDIR environment variable to point at it, if the regular local config dir is not found.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">config_dir</td><td>Receives the full path to the config dir.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">config_dir_sz</td><td>The capacity, in characters, of <code>config_dir</code>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the request. </dd></dl>

</div>
</div>
<a class="anchor" id="aac5fb9f1e0707ece22a6b987617cef95"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_nudge_all </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64&#160;</td>
          <td class="paramname"><em>arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>timeout_ms</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>nudge_count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Provides a mechanism for an external entity on the guest OS to communicate with a client. Requires administrative privileges. A process 'nudge' causes a client event handler to be invoked (use <a class="el" href="dr__events_8h.html#a9037603d0bd5bfca4198011adb8d10eb">dr_register_nudge_event()</a> to register the handler function). A nudge is ignored if the process is not running under DynamoRIO, the specified client is not loaded, or if the client does not provide a handler. Nudges are attempted to all processes running on the system.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>An argument passed to the client's nudge handler.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">timeout_ms</td><td>The number of milliseconds to wait for each nudge to complete before continuing. If INFINITE is supplied then the wait is unbounded. If 0 is supplied the no wait is performed. If a wait times out DR_NUDGE_TIMEOUT will be returned.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">nudge_count</td><td>Returns the number of processes nudged. Client can supply NULL if this value is not needed.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the nudge.</dd></dl>
<dl class="section remark"><dt>Remarks:</dt><dd>A process nudge is a one way asynchronous communication from an external entity to a client. It does not allow a client to return information back to the nudge originator. To communicate from a client to another process, use the channels specified in <a class="el" href="using.html#sec_comm">Communication</a>.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="a56dbe16a233afc5d2803222799ecd490"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_nudge_pid </td>
          <td>(</td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>process_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64&#160;</td>
          <td class="paramname"><em>arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>timeout_ms</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Provides a mechanism for an external entity on the guest OS to communicate with a client. Requires administrative privileges. A process 'nudge' causes a client event handler to be invoked (use <a class="el" href="dr__events_8h.html#a9037603d0bd5bfca4198011adb8d10eb">dr_register_nudge_event()</a> to register the handler function). A nudge is ignored if the process is not running under DynamoRIO, the specified client is not loaded, or if the client does not provide a handler.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_id</td><td>The system id of the process to nudge (see <a class="el" href="dr__tools_8h.html#a83b3658ca78e6b7adc81c57691f0fe50">dr_get_process_id()</a>)</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>An argument passed to the client's nudge handler.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">timeout_ms</td><td>The number of milliseconds to wait for the nudge to complete before returning. If INFINITE is supplied then the wait is unbounded. If 0 is supplied the no wait is performed. If the wait times out DR_NUDGE_TIMEOUT will be returned.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the nudge.</dd></dl>
<dl class="section remark"><dt>Remarks:</dt><dd>A process nudge is a one way asynchronous communication from an external entity to a client. It does not allow a client to return information back to the nudge originator. To communicate from a client to another process, use the channels specified in <a class="el" href="using.html#sec_comm">Communication</a>.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="a9df3d364222898cebc24264a161e2a5f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_nudge_process </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint64&#160;</td>
          <td class="paramname"><em>arg</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint&#160;</td>
          <td class="paramname"><em>timeout_ms</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>nudge_count</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Provides a mechanism for an external entity on the guest OS to communicate with a client. Requires administrative privileges. A process 'nudge' causes a client event handler to be invoked (use <a class="el" href="dr__events_8h.html#a9037603d0bd5bfca4198011adb8d10eb">dr_register_nudge_event()</a> to register the handler function). A nudge is ignored if the process is not running under DynamoRIO, the specified client is not loaded, or if the client does not provide a handler.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">arg</td><td>An argument passed to the client's nudge handler.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">timeout_ms</td><td>The number of milliseconds to wait for each nudge to complete before continuing. If INFINITE is supplied then the wait is unbounded. If 0 is supplied the no wait is performed. If a wait times out DR_NUDGE_TIMEOUT will be returned.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">nudge_count</td><td>Returns the number of processes nudged. Client can supply NULL if this value is not needed.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the nudge.</dd></dl>
<dl class="section remark"><dt>Remarks:</dt><dd>If there are multiple processes executing with the same name, all of them are nudged.</dd>
<dd>
A process nudge is a one way asynchronous communication from an external entity to a client. It does not allow a client to return information back to the nudge originator. To communicate from a client to another process, use the channels specified in <a class="el" href="using.html#sec_comm">Communication</a>.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="aee3f7b1d9fb8b7e99e91877b692f39a5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT size_t dr_num_registered_clients </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Retrieve the number of clients registered for a particular process for the current user.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be queried. If pid == 0, the general configuration for process_name will be queried.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to unset.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The number of clients registered for the given process and platform. </dd></dl>

</div>
</div>
<a class="anchor" id="aa97d41a6af959ad7022f8a9f44063c6d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool dr_process_is_registered </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> *&#160;</td>
          <td class="paramname"><em>dr_mode</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>debug</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dr_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Check if a process is registered to run under DynamoRIO. To obtain client information, use <a class="el" href="dr__config_8h.html#a9c15192d806139f70aa84b41589548e8">dr_get_client_info()</a>.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be queried. If pid == 0, the general configuration for process_name will be queried.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to check.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_root_dir</td><td>If the process is registered, the root DynamoRIO directory provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length MAX_PATH.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_mode</td><td>If the process is registered, the mode provided at registration. Callers can pass NULL if this value is not needed.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">debug</td><td>If the process is registered, the debug flag provided at registration. Callers can pass NULL if this value is not needed.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_options</td><td>If the process is registered, the extra DynamoRIO parameters provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true if the process is registered for the given platform. </dd></dl>

</div>
</div>
<a class="anchor" id="ae9e35bfc0682dd3bee71eb8992d9eca3"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_register_client </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>client_pri</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>client_path</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>client_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Register a client for a particular process. Note that the process must first be registered via <a class="el" href="dr__config_8h.html#a10d7c5dbc9a055fa6c18bf3f2a6eea46">dr_register_process()</a> before calling this routine.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be modified. If pid == 0, the general configuration for process_name will be modified.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to unset.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>A client_id_t uniquely identifying the client. DynamoRIO provides the client ID as a parameter to <a class="el" href="dr__api_8h.html#a20a4dc9da7f6bb9121e30bb3570c6961">dr_init()</a>. Clients use this ID to retrieve client-specific path and option information. Outside entities also identify the target of a nudge via this ID.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_pri</td><td>The client number, or priority. Client registration includes a value indicating the priority of a client relative to other clients. In multi-client settings, a client's priority influences event callback ordering. That is, higher priority clients can register their callbacks first; DynamoRIO then calls these routines last. Client priorities range consecutively from 0 to N-1, where N is the number of registered clients. Specify priority 0 to register a client with highest priority.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_path</td><td>A NULL-terminated string specifying the full path to a valid client library. The string length cannot exceed MAX_PATH. The client path may not include any semicolons and when combined with <code>client_options</code> may not include all three quote characters (', ", `) simultaneously.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_options</td><td>A NULL-terminated string specifying options that are available to the client via <a class="el" href="dr__tools_8h.html#a10831623706378cfc3082c0e27e31c4c">dr_get_options()</a>. The string length cannot exceed <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>. The client options may not include any semicolons and when combined with <code>client_path</code> may not include all three quote characters (', ", `) simultaneously.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of registration. </dd></dl>

</div>
</div>
<a class="anchor" id="a10d7c5dbc9a055fa6c18bf3f2a6eea46"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_register_process </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a>&#160;</td>
          <td class="paramname"><em>dr_mode</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>debug</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dr_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Register a process to run under DynamoRIO. Note that this routine only sets the base options to run a process under DynamoRIO. To register one or more clients, call <a class="el" href="dr__config_8h.html#ae9e35bfc0682dd3bee71eb8992d9eca3">dr_register_client()</a> subsequently.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, a one-time configuration is created just for it. If pid == 0, a general configuration is created for all future instances of process_name.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_root_dir</td><td>A NULL-terminated string specifying the full path to a valid DynamoRIO root directory. The string length cannot exceed MAX_PATH.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_mode</td><td>Specifies the mode under which DynamoRIO should operate. See dr_operation_mode_t.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">debug</td><td>If true, a DynamoRIO debug build will be used; otherwise, a release build will be used.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to set.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_options</td><td>A NULL-terminated string controlling DynamoRIO's behavior. Most users should not need to specify options. The total string length cannot exceed <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of registration. Note that registration fails if the requested process is already registered. To modify a process's registration, first call <a class="el" href="dr__config_8h.html#aca4a88a8e35548096f920e90d9a8ad12">dr_unregister_process()</a> to remove an existing registration.</dd></dl>
<dl class="section remark"><dt>Remarks:</dt><dd>After registration, a process will run under DynamoRIO when launched by the drinject tool or using drinjectlib. Note that some processes may require a system reboot to restart. Process registration that is not specific to one pid (i.e., if pid == 0) persists across reboots until explicitly unregistered. </dd></dl>

</div>
</div>
<a class="anchor" id="a285ae07edfcba05d92510fb38e8057d1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_register_syswide </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Sets up systemwide injection so that registered applications will run under DynamoRIO however they are launched (i.e., they do not need to be explicitly invoked with the drrun or drinject tools). This requires administrative privileges and affects all users (though configurations remain private to each user). On Windows NT, a reboot is required for this to take effect.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those to use.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_root_dir</td><td>The root DynamoRIO directory.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the operation. The operation will fail if the caller does not have sufficient privileges.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>On Windows, an application that does not link with user32.dll will not be run under control of DynamoRIO via systemwide injection. Such applications will only be under DynamoRIO control if launched by the drrun or drinject tools or if the parent process (typically explorer.exe, for manually launched applications) is already under DynamoRIO control (the parent can be in any mode, but a 32-bit parent cannot inject into a 64-bit child). Only some small non-graphical applications do not link with user32.dll.</dd>
<dd>
Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="aaaf883cebe8ed67ee4f0fb9a044ef7f5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool dr_registered_process_iterator_hasnext </td>
          <td>(</td>
          <td class="paramtype">dr_registered_process_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A registered process iterator created with <a class="el" href="dr__config_8h.html#a70da2fb9d39da91761eaaf686746f68b">dr_registered_process_iterator_start()</a></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true if there are more registered processes to iterate over</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="a7d9d2d496f3ef8bdbfbb10c0567673f9"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool dr_registered_process_iterator_next </td>
          <td>(</td>
          <td class="paramtype">dr_registered_process_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a486e581c1077fcb8a49e796c9bc188be">dr_operation_mode_t</a> *&#160;</td>
          <td class="paramname"><em>dr_mode</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool *&#160;</td>
          <td class="paramname"><em>debug</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>dr_options</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Return information about a registered process</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A registered process iterator created with <a class="el" href="dr__config_8h.html#a70da2fb9d39da91761eaaf686746f68b">dr_registered_process_iterator_start()</a>.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">process_name</td><td>The name of the registered process. Callers can pass NULL if this value is not needed. Otherwise the parameter must be a caller-allocated array of length MAX_PATH.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_root_dir</td><td>The root DynamoRIO directory provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length MAX_PATH.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_mode</td><td>If the process is registered, the mode provided at registration. Callers can pass NULL if this value is not needed.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">debug</td><td>If the process is registered, the debug flag provided at registration. Callers can pass NULL if this value is not needed.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">dr_options</td><td>If the process is registered, the extra DynamoRIO parameters provided at registration. Callers can pass NULL if this value is not needed. Otherwise, the parameter must be a caller-allocated array of length <a class="el" href="dr__config_8h.html#a386c1346b4d4a46488fc050c51bfe9bc">DR_MAX_OPTIONS_LENGTH</a>.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true if the information was successfully retrieved.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="a70da2fb9d39da91761eaaf686746f68b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT dr_registered_process_iterator_t* dr_registered_process_iterator_start </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Creates and starts an iterator for iterating over all processes registered for the given platform and given global or local parameter.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to check.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>iterator for use with <a class="el" href="dr__config_8h.html#aaaf883cebe8ed67ee4f0fb9a044ef7f5">dr_registered_process_iterator_hasnext()</a>and <a class="el" href="dr__config_8h.html#a7d9d2d496f3ef8bdbfbb10c0567673f9">dr_registered_process_iterator_next()</a>. Must be freed with <a class="el" href="dr__config_8h.html#aee72e717937024591655f039c5b9c637">dr_registered_process_iterator_stop()</a></dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="aee72e717937024591655f039c5b9c637"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT void dr_registered_process_iterator_stop </td>
          <td>(</td>
          <td class="paramtype">dr_registered_process_iterator_t *&#160;</td>
          <td class="paramname"><em>iter</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Stops and frees a registered process iterator.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">iter</td><td>A registered process iterator created with <a class="el" href="dr__config_8h.html#a70da2fb9d39da91761eaaf686746f68b">dr_registered_process_iterator_start()</a></td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="ad687570692d702cb71e4f3f4ac1a3559"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT bool dr_syswide_is_on </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Returns whether systemwide injection is enabled.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those to use.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_root_dir</td><td>The root DynamoRIO directory.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Whether systemwide injection is enabled.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
<a class="anchor" id="a882f9166151596e7087393384d0f50c7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_unregister_client </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__defines_8h.html#a68540a70b4f8150a4fe6dcec91bf8825">client_id_t</a>&#160;</td>
          <td class="paramname"><em>client_id</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Unregister a client for a particular process.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the one-time configuration for that pid will be modified. If pid == 0, the general configuration for process_name will be modified.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to unset.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">client_id</td><td>The unique client ID provided at client registration.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of unregistration. </dd></dl>

</div>
</div>
<a class="anchor" id="aca4a88a8e35548096f920e90d9a8ad12"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_unregister_process </td>
          <td>(</td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>process_name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">process_id_t&#160;</td>
          <td class="paramname"><em>pid</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>global</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Unregister a process from running under DynamoRIO.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">process_name</td><td>A NULL-terminated string specifying the name of the target process. The string should identify the base name of the process, not the full path of the executable (e.g., calc.exe).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pid</td><td>A process id of a target process, typically just created and suspended via <a class="el" href="dr__inject_8h.html#afdd617e9fd2f5876fdaa63c27839c6de">dr_inject_process_exit()</a>. If pid != 0, the existing one-time configuration is removed. If pid == 0, the general configuration for process_name is removed.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">global</td><td>Whether to use global or user-local config files. On Windows, global config files are stored in a dir pointed at by the DYNAMORIO_HOME registry key. On Linux, they are in /etc/dynamorio. Administrative privileges may be needed if global is true. Note that DynamoRIO gives local config files precedence when both exist. The caller must separately create the global directory.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those configurations to set.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of unregistration. Note that unregistration fails if the process is not currently registered to run under DynamoRIO. </dd></dl>

</div>
</div>
<a class="anchor" id="a2e9925a6b97a3fbe329f94faa60638ca"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">DR_EXPORT <a class="el" href="dr__config_8h.html#a5e24de02bea5743b74adb6e64af19ae7">dr_config_status_t</a> dr_unregister_syswide </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="dr__config_8h.html#a43632ea1157f971b7af4273ef696935c">dr_platform_t</a>&#160;</td>
          <td class="paramname"><em>dr_platform</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>dr_root_dir</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Disables systemwide injection. Registered applications will not run under DynamoRIO unless explicitly launched with the drrun or drinject tools (or a custom tool that uses the drinjectlib library). On Windows NT, a reboot is required for this to take effect.</p>
<dl class="params"><dt>Parameters:</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_platform</td><td>Configurations are kept separate for 32-bit processes and 64-bit processes. This parameter allows selecting which of those to use.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dr_root_dir</td><td>The root DynamoRIO directory.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A dr_config_status_t code indicating the result of the operation. The operation will fail if the caller does not have sufficient privileges.</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>Not yet available on Linux or MacOS. </dd></dl>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_3f960cec7fb648840e8ab2c814e874ae.html">include</a></li><li class="navelem"><a class="el" href="dr__config_8h.html">dr_config.h</a></li>
    <li class="footer" style="float:none;text-align:center"><img border=0 src="favicon.png"> &nbsp;  DynamoRIO API version 5.0.0 --- Wed Sep 10 2014 21:36:43 &nbsp; <img border=0 src="favicon.png">
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>
